package com.muchfish.algorithm.queue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 225-用队列实现栈
 */
public class MyStack {
    Queue<Integer> queue;

    /**
     * Initialize your data structure here.
     */
    public MyStack() {
        queue = new LinkedList<>();
    }

    /**
     * Push element x onto stack.
     * ：队列的先进先出，所以需要把队列中的元素依次出队，再依次入队直到当前元素位置，当前元素，实现栈的先进后出
     */
    public void push(int x) {
        queue.add(x); //先将新元素入队尾
        for (int i = 1; i < queue.size(); i++) {
            //再将之前的元素取出，再入队尾。
            //i 从1开始，因为第0个元素已经入队尾了
            queue.add(queue.poll());
        }
    }

    /**
     * Removes the element on top of the stack and returns that element.
     */
    public int pop() {
        return queue.poll();
    }

    /**
     * Get the top element.
     */
    public int top() {
        return queue.peek();
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        stack.push(6);
        while (!stack.queue.isEmpty()) {
            System.out.println(stack.pop());
        }
    }
}
